<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // let 使用的总结
        //  1. 必须在声明初始化后才可使用（暂时性死区 TDZ）
        //  2. 在同一作用域下不能重复使用let声明变量
        //  3. 支持块级作用域。


        // console.log(a); // Cannot access 'a' before initialization
        // let a = 10;

        // let b = 20;
        // //let b = 30; // Identifier 'b' has already been declared
        // {
        //     let b = 30; // 在此作用域块中可以继续声明
        // }

        // 使用{} 参生一个块级作用域。
        {
            var c = 10;
            let d = 20;
        }
        console.log(c); // 可以访问
        //console.log(d); // 不可以访问


        // 块级作用的特点：
        for(let i = 0; i < 3; i++){
            setTimeout(function(){
                console.log(i);
            },0);
        }
        // 输出结果：0,1,2
        // 上面的循环等价于如下代码
        /*
        {
            let i = 0;
            setTimeout(function(){
                console.log(i);
            },0);
        }
        {
            let i = 1;
            setTimeout(function(){
                console.log(i);
            },0);
        }
        {
            let i = 2;
            setTimeout(function(){
                console.log(i);
            },0);
        }
        */
    </script>
</body>
</html>